# 1、闭包的定义:
# 在函数嵌套的前提下，内部函数使用了外部函数的变量，并且外部函数返回了内部函数，
# 我们把这个使用外部函数变量的内部函数称为闭包。
# 闭包的形成条件:
# 1. 在函数嵌套(函数里面再定义函数)的前提下
# 2. 内部函数使用了外部函数的变量(还包括外部函数的参数)
# 3. 外部函数返回了内部函数

def say_hello(name):
    print(name)
    def say(msg):
        name = '李四'  # 在内部函数中，定义了一个局部变量而已。
        print(f'对着{name}说{msg}')

    print(name)
    return say


if __name__ == '__main__':
    sa = say_hello('张三')
    sa('hello')
    # sa('你在家吗？')
